/*
 * @lc app=leetcode.cn id=2044 lang=cpp
 *
 * [2044] 统计按位或能得到最大值的子集数目
 */
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cmath>

using namespace std;
// @lc code=start
class Solution {
public:
    int countMaxOrSubsets(vector<int>& nums) {
        int maxtmp = 0;
        int ret = 0;
        int n = nums.size();
        int k = pow(2, n) - 1;
        int tmp = 0;
        for(int i = 1;i <= k;i++) {
            tmp = 0;
            for(int j = 0;j < n;j++) {
                if((i >> j) % 2) {
                    tmp |= nums[j];
                }
            }
            if(maxtmp < tmp) {
                maxtmp = tmp;
                ret = 1;
            }else if(maxtmp == tmp) {
                ret++;
            }
        }
        return ret;
    }
};
// @lc code=end

